/*
The main header file for DDMCMC algorithm.
*/
#ifndef _DDMCMC
#define _DDMCMC

#include <fstream>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include "ddmcmc_settings.h"
#include "ddmcmc_meanshift.h"
#include "ddmcmc_edge.h"

using namespace cv;
using namespace std;

bool DDMCMCSegmentation(Mat img);

class DDMCMC {
public:
	// constructor and destructor
	DDMCMC();
	~DDMCMC();

	// helper functions
	void segmentRegions();
	int labelRegions();
	void generateProposal();

	void RunDDMCMCSegmentation(Raster_Color<uchar> &raster, Matrix<int> imageLabel[3], int num_label[], Raster<int> &image, const MCMC_SegSetting& setting);


public:
	Mat mImg;
	DDMCMC_Settings ddmcmcSettings;
	DDMCMC_EdgePrcs *edgePrcs;
	DDMCMC_MeanShiftClustering *msClustering;
};



#endif